package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
)

func process(conn net.Conn){
	defer conn.Close()  // 关闭连接

	//fmt.Printf("连接来自%s\n", conn.RemoteAddr().String())
	for {
		buf := make([]byte, 1024)
		// 等待客户端连接
		n, err := conn.Read(buf)  // 读取,返回值n为返回的总字节数

		if err != nil{
			fmt.Printf("客户端%s退出连接，error=%s\n", conn.RemoteAddr().String(), err)
			//return  // 当前客户端连接退出，需返回等待其他连接
			break
		}
		fmt.Println("字节数", n)
		fmt.Println("接收内容", string(buf[:n]))

		fmt.Printf("server send:")
		inputs:=bufio.NewReader(os.Stdin)
		data, _:=inputs.ReadString('\n')
		fmt.Println(data)
		w, err := conn.Write([]byte(data))
		if err != nil{
			fmt.Println("write error", err)
		}
		fmt.Println(data, &data)
		fmt.Println("发送字节数", w)
	}
}

func listen() {
	// 监听端口
	listen, err := net.Listen("tcp", "0.0.0.0:8000")
	if err!=nil{
		fmt.Println("监听错误", err)
		return
	}
	defer listen.Close()  // 延时关闭监听

	fmt.Println("listen", listen)

	for{
		conn, err := listen.Accept()  // 客户端连接
		if err != nil{
			fmt.Println("连接错误", err)
		}
		fmt.Printf("连接来自%s\n", conn.RemoteAddr().String())
		go process(conn)
	}

}

func main() {
	listen()
}